home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / PNL Libraries / MyOOMenus.p < prev    next >
Encoding:
Text File  |  1995-10-23  |  4.7 KB  |  186 lines  |  [TEXT/CWIE]

  1. unit MyOOMenus;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types, MyFMenus;
  7.  
  8.     var
  9.         editEnabled: boolean;
  10.  
  11.     procedure StartupOOMenus;
  12.     procedure DisplayMenuBar;
  13.     procedure DoDefaultMenu (themenu, theitem: integer);
  14.     function SetOOMenuBar: boolean;
  15.  
  16. implementation
  17.  
  18.     uses
  19.         Traps, Balloons, Devices, MyTypes, MySystemGlobals, MyMenus, MyStrings, MyVersionResource,
  20.         BaseGlobals, MyFMenus, MyOOMainLoop, AERegistry, MyAEUtils, AEObjects, MyStartup;
  21.  
  22.     function SetOOMenuBar: boolean;
  23.     begin
  24.         SetOOMenuBar := FrontObject.SetMenuBar;
  25.     end;
  26.  
  27.     function HandleEditMenu (var event, reply: AppleEvent; refcon: longInt): OSErr;
  28.     begin
  29.         event := event; { UNUSED! }
  30.         reply := reply; { UNUSED! }
  31.         FrontObject.DoEditMenu(refcon);
  32.         HandleEditMenu := noErr;
  33.     end;
  34.  
  35.     procedure DoDefaultMenu (themenu, theitem: integer);
  36.         var
  37.             save: grafPtr;
  38.             DAName: str255;
  39.             oe: OSErr;
  40.     begin
  41.         if themenu = M_Apple then begin
  42.             GetPort(save);
  43.             GetMenuItemText(GetMenuHandle(M_apple), theitem, DAName);
  44.             oe := OpenDeskAcc(DAName);
  45.             SetPort(save);
  46.         end else if themenu = M_Edit then begin
  47.             if has_AppleEvents then begin
  48.                 case theitem of
  49.                     EMUndo: 
  50.                         SendSelfSimpleEvent(kAECoreSuite, kAEUndo);
  51.                     EMCut: 
  52.                         SendSelfSimpleEvent(kAECoreSuite, kAECut);
  53.                     EMCopy: 
  54.                         SendSelfSimpleEvent(kAECoreSuite, kAECopy);
  55.                     EMPaste: 
  56.                         SendSelfSimpleEvent(kAECoreSuite, kAEPaste);
  57.                     EMClear: 
  58.                         SendSelfSimpleEvent(kAECoreSuite, kAEDelete);
  59.                     EMSelectAll: 
  60.                         SendSelfSimpleEvent(kAECoreSuite, kAESelect); { hmmm }
  61.                     otherwise
  62.                         FrontObject.DoEditMenu(theitem);
  63.                 end;
  64.             end else begin
  65.                 FrontObject.DoEditMenu(theitem);
  66.             end;
  67.         end;
  68.     end;
  69.  
  70.     procedure DoClose;
  71.     begin
  72.         DoCloseAll(last_event_had_option);
  73.     end;
  74.  
  75.     procedure SetCloseMenu (themenu, theitem: integer);
  76.         var
  77.             fw: windowPtr;
  78.             er: EventRecord;
  79.             dummy: boolean;
  80.     begin
  81.         fw := FrontWindow;
  82.         if fw = nil then begin
  83.             SetIDItemEnable(themenu, theitem, (fw <> nil) & windowPeek(fw)^.goAwayFlag & (GetWType(fw) <> WT_NotMine));
  84.         end
  85.         else begin
  86.             SetIDItemEnable(themenu, theitem, windowPeek(fw)^.goAwayFlag);
  87.         end;
  88.         dummy := OSEventAvail(everyEvent, er);
  89.         last_event_had_option := BAND(er.modifiers, optionKey) <> 0;
  90.         if option_close_str > 0 then begin
  91.             if last_event_had_option then begin
  92.                 SetIDItem(themenu, theitem, GetGlobalString(option_close_str));
  93.             end
  94.             else begin
  95.                 SetIDItem(themenu, theitem, GetGlobalString(normal_close_str));
  96.             end;
  97.         end;
  98.     end;
  99.  
  100.     procedure SetEditMenus (menu, item: integer);
  101.     begin
  102.         menu := menu; { UNUSED! }
  103.         FrontObject.SetEditMenuItem(item);
  104.     end;
  105.  
  106.     procedure DoQuit;
  107.     begin
  108.         if has_AppleEvents then begin
  109.             SendSelfSimpleEvent(kCoreEventClass, kAEQuitApplication);
  110.         end
  111.         else begin
  112.             quitNow := true;
  113.         end;
  114.     end;
  115.  
  116.     procedure DisplayMenuBar;
  117.         var
  118.             dummyb: boolean;
  119.     begin
  120.         dummyb := SetOOMenuBar;
  121.         DrawMenuBar;
  122.     end;
  123.  
  124.     function InitOOMenus(var msg: integer): OSStatus;
  125.         var
  126.             junk: OSErr;
  127.             HandleEditMenuProc : UniversalProcPtr;
  128.     begin
  129.         msg := msg; { Unused }
  130.         quitNow := false;
  131.         editEnabled := true;
  132.  
  133.         MH_Apple := GetFMenu(M_Apple);
  134.         AppendResMenu(MH_Apple, 'DRVR');
  135.         InsertMenu(MH_Apple, 0);
  136.  
  137.         MH_File := GetFMenu(M_File);
  138.         InsertMenu(MH_File, 0);
  139.         MH_Edit := GetFMenu(M_Edit);
  140.         InsertMenu(MH_Edit, 0);
  141.  
  142. {$IFC 0}
  143.         M_HM_Help_I := -1;
  144.         hstr := GetGlobalString(help_menu_text);
  145.         if has_HelpMgr and (hstr <> '') then begin
  146.             GetVersion(vers);
  147.             SPrintS3(hstr, hstr, vers.name, '', '');
  148.             oe := HMGetHelpMenuHandle(mh);
  149.             if (oe = noErr) and (mh <> nil) then begin
  150.                 AppendMenu(mh, hstr);
  151.                 M_HM_Help_I := CountMItems(mh);
  152.                 AddFCommand(kHMHelpMenuID, M_HM_Help_I, CHelp);
  153.             end;
  154.         end;
  155. {$ENDC}
  156.  
  157.         if has_AppleEvents then begin
  158.             HandleEditMenuProc := NewAEEventHandlerProc(@HandleEditMenu);
  159.             junk := AEInstallEventHandler(kAECoreSuite, kAEUndo, HandleEditMenuProc, EMUndo, false);
  160.             junk := AEInstallEventHandler(kAECoreSuite, kAECut, HandleEditMenuProc, EMCut, false);
  161.             junk := AEInstallEventHandler(kAECoreSuite, kAECopy, HandleEditMenuProc, EMCopy, false);
  162.             junk := AEInstallEventHandler(kAECoreSuite, kAEPaste, HandleEditMenuProc, EMPaste, false);
  163.             junk := AEInstallEventHandler(kAECoreSuite, kAEDelete, HandleEditMenuProc, EMClear, false);
  164.             junk := AEInstallEventHandler(kAECoreSuite, kAESelect, HandleEditMenuProc, EMSelectAll, false);
  165.         end;
  166.  
  167.         SetFBoth(Cclose, DoClose, SetCloseMenu);
  168.         SetFCommand(Cquit, DoQuit);
  169.         SetFSetMenu(Cundo, SetEditMenus);
  170.         SetFSetMenu(Ccut, SetEditMenus);
  171.         SetFSetMenu(Ccopy, SetEditMenus);
  172.         SetFSetMenu(Cpaste, SetEditMenus);
  173.         SetFSetMenu(Cclear, SetEditMenus);
  174.         SetFSetMenu(Cselectall, SetEditMenus);
  175.         SetFMenus;
  176.         InitOOMenus := noErr;
  177.     end;
  178.  
  179.     procedure StartupOOMenus;
  180.     begin
  181.         StartupFMenus;
  182.         StartupMainLoop;
  183.         SetStartup(InitOOMenus, nil, 0, nil);
  184.     end;
  185.     
  186. end.